package RRHH_Modelo;

import Conexion.Conexion;
import Modelo.StringMD;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class RHH_USUARIO {

    private int ID;
    private int ID_CARGO;
    private int ID_PERSONA;
    private int ESTADO;
    private int ESTADO_LOG;
    private int FLAG;
    private String USUARIO;
    private String PASSWORD;
    private Conexion con = null;

    public RHH_USUARIO(Conexion con) 
    {
        this.con=con;
    }

    public RHH_USUARIO(String USUARIO, String PASSWORD, int ID_CARGO,int ID_PERSONA, int FLAG)
    {
        this.USUARIO = USUARIO;
        this.PASSWORD = PASSWORD;
        this.ID_CARGO = ID_CARGO;
        this.ID_PERSONA = ID_PERSONA;
        this.FLAG = FLAG;
    }               
    public boolean verificarPass(String pass) throws SQLException {
        String PASSWORD2 = StringMD.getStringMessageDigest(pass, StringMD.SHA512);
        if(PASSWORD2.equals(PASSWORD))
            return true;
        else
            return false;
    }
    public boolean Insertar() throws SQLException {        
            con = new Conexion("broker", "oracle123");
            String PASSWORD2 = StringMD.getStringMessageDigest(PASSWORD, StringMD.SHA512);
            String consulta = "insert into BROKER.RHH_USUARIO(ID,USUARIO,PASSWORD,ID_CARGO,ESTADO,ESTADO_LOG,ID_PERSONA, FLAG) VALUES (0, '"+USUARIO+"', '"+PASSWORD2+"', "+ID_CARGO+", 0, 1, "+ID_PERSONA+","+FLAG+" )";
            con.EjecutarSentencia(consulta);
            consulta = "select BROKER.RHH_USUARIO2_SEQ.currval as ID from dual";
            ResultSet rs = con.EjecutarConsulta(consulta);
            rs.next();
            this.setID(rs.getInt("ID"));
            consulta = "CREATE USER "+USUARIO+" IDENTIFIED BY "+PASSWORD+" DEFAULT TABLESPACE \"BROKER\"  TEMPORARY TABLESPACE \"TEMP\"  PROFILE \"DEFAULT\"  QUOTA UNLIMITED ON \"BROKER\"";
            con.EjecutarSentencia(consulta);
            consulta = "GRANT \"PERMISOS\" TO "+USUARIO+" WITH ADMIN OPTION";
            con.EjecutarSentencia(consulta);
            consulta = "ALTER USER "+USUARIO+" DEFAULT ROLE PERMISOS";
            con.EjecutarSentencia(consulta);                  
            return true;        
    }       
      
    
   public boolean eliminar(String usr) throws SQLException
   {
       con = new Conexion("broker", "oracle123");
       String consulta = "delete from BROKER.RHH_USUARIO where USUARIO = "+usr;
       con.EjecutarSentencia(consulta);
       consulta = "drop user "+usr+" cascade";
       con.EjecutarSentencia(consulta);
       return true;
   }

    public boolean ModificarUSR(int id_cargo,  String USUARIO, String PASSWORD, int ESTADO) {
        try {
            String PASSWORD2 = StringMD.getStringMessageDigest(PASSWORD, StringMD.SHA512);
            String pss="";
            if(PASSWORD.length()>0){
                pss= ",PASSWORD = '" + PASSWORD2+"'";
            }
            String consulta = "update  BROKER.RHH_USUARIO set USUARIO = '" + USUARIO +"' "+ pss + ", ESTADO=" + ESTADO + ", FLAG="+FLAG+" where ID = " + getID();
            con.EjecutarSentencia(consulta);
            consulta = "ALTER USER " + USUARIO + " IDENTIFIED BY " + PASSWORD;
            con.EjecutarSentencia(consulta);
            if (ESTADO == 1) {
                consulta = "alter user " + USUARIO + " account lock";
                con.EjecutarSentencia(consulta);
            } else {
                consulta = "alter user " + USUARIO + " account unlock";
                con.EjecutarSentencia(consulta);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public void ModificarCargo(double id_cargo) throws SQLException {
            String consulta = "update  BROKER.RHH_USUARIO set ID_CARGO = " + id_cargo + " where ID = " + getID();
            con.EjecutarSentencia(consulta);
    }
    
    public void jubilar() throws SQLException {
            String consulta = "update  BROKER.RHH_USUARIO set ESTADO = 3 where ID = " + getID();
            con.EjecutarSentencia(consulta);
    }
    
     public boolean ActivarXhito() throws SQLException
    {
        con = new Conexion("broker", "oracle123");
        con.Conectar();
        String consuta1 = "UPDATE BROKER.RHH_USUARIO SET ESTADO = 0, FLAG =0 \n" +
                        "WHERE  id = "+getID()+" \n" +
                        "AND to_date(sysdate,'DD/MM/YYYY') >=(SELECT       TO_DATE(RHH_FECHAS_HITO.FECHA,'DD/MM/YYYY')\n" +
                        "FROM BROKER.RHH_USUARIO, BROKER.RHH_PERSONA, BROKER.RHH_FECHAS_HITO\n" +
                        "WHERE (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n" +
                        "AND (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n" +
                        "AND (RHH_FECHAS_HITO.ID_EVENTO_HITO=3)\n" +
                        "AND (RHH_USUARIO.id = "+getID()+"))";
        con.EjecutarSentencia(consuta1);        
        
        consuta1 = "select * from BROKER.RHH_USUARIO where id = "+getID();
        ResultSet rs = con.EjecutarConsulta(consuta1);
        rs.next();
        if(rs.getInt("ESTADO")==0)
        {
            String consulta = "alter user " + USUARIO + " account unlock";
            con.EjecutarSentencia(consulta);
            con.Close();
            return true;
        }
        else
        {
            con.Close();
            return false;
        }        
    }
    public int blockeado() throws SQLException {
        String consulta = "SELECT count(*) as cant\n" +
                          "FROM SYS.DBA_USERS\n" +
                          "WHERE (DBA_USERS.ACCOUNT_STATUS = 'LOCKED') AND (DBA_USERS.USERNAME = '"+USUARIO.toUpperCase()+"')";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("cant");
    }
    public String inicialusuario(int usuario) throws SQLException {
        String consulta = "SELECT UPPER( lpad(RHH_PERSONA.PRIMER_APELLIDO,1)|| lpad(RHH_PERSONA.SEGUNDO_APELLIDO,1)||lpad(RHH_PERSONA.PRIMER_NOMBRE,1)) as inicial\n" +
                        " FROM BROKER.RHH_USUARIO, BROKER.RHH_PERSONA\n" +
                        " WHERE (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n" +
                        " AND (RHH_USUARIO.ID = "+usuario+")";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getString("inicial");
    }
    public boolean Activar() throws SQLException 
    {
        String consulta = "alter user " + USUARIO + " account unlock";
        con.EjecutarSentencia(consulta);
        consulta = "update BROKER.RHH_USUARIO set ESTADO =0 where ID="+getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    public boolean ActivarJubilado() throws SQLException 
    {
        String consulta = "alter user " + USUARIO + " account unlock";
        con.EjecutarSentencia(consulta);
        consulta = "update BROKER.RHH_USUARIO set ESTADO =3 where ID="+getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    
    public boolean Desactivar() throws SQLException {
        String consulta = "alter user " + USUARIO + " account lock";
        con.EjecutarSentencia(consulta);
        consulta = "update BROKER.RHH_USUARIO set ESTADO =2 where ID="+getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    public boolean JubiladoSuspendido() throws SQLException {
        String consulta = "alter user " + USUARIO + " account lock";
        con.EjecutarSentencia(consulta);
        consulta = "update BROKER.RHH_USUARIO set ESTADO =4 where ID="+getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
   
    public RHH_USUARIO BuscarXid(double ID) {
        try {
            String consulta = "select * from BROKER.RHH_USUARIO where ID = " + ID;
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs).get(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public int esContador(double ID) {
        try {
            String consulta = "SELECT COUNT (RHH_USUARIO.ID) PERMISO\n" +
                              "FROM BROKER.SIS_PROCESO_ROLES,\n" +
                              "BROKER.SIS_ROLES,\n" +
                              "BROKER.SIS_SUB_PROCESO,\n" +
                              "BROKER.SIS_PERFILES_ROLES,\n" +
                              "BROKER.SIS_PERFILES,\n" +
                              "BROKER.RHH_CARGO,\n" +
                              "BROKER.RRH_CARGO_PERFIL,\n" +
                              "BROKER.RHH_USUARIO\n" +
                              "WHERE (SIS_PROCESO_ROLES.ID_ROLES = SIS_ROLES.ID)\n" +
                              "AND (SIS_PROCESO_ROLES.ID_SUB_PROCESO = SIS_SUB_PROCESO.ID)\n" +
                              "AND (SIS_PERFILES_ROLES.ID_ROLES = SIS_ROLES.ID)\n" +
                              "AND (SIS_PERFILES_ROLES.ID_PERFILES = SIS_PERFILES.ID)\n" +
                              "AND (RRH_CARGO_PERFIL.ID_PERFIL = SIS_PERFILES.ID)\n" +
                              "AND (RRH_CARGO_PERFIL.ID_CARGO = RHH_CARGO.ID)\n" +
                              "AND (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                              "AND (SIS_SUB_PROCESO.ID IN (23, 24, 25))\n" +
                              "AND (RHH_USUARIO.ID = "+ID+")";
            ResultSet rs = con.EjecutarConsulta(consulta);
            rs.next();
            return rs.getInt("PERMISO");
        } catch (Exception e) {
            return 0;
        }
    }
    public RHH_USUARIO BuscarXidPersona(double Id) {
        try {
            String consulta = "select * from BROKER.RHH_USUARIO where ID_PERSONA= " + Id;
            ResultSet rs = con.EjecutarConsulta(consulta);
            List<RHH_USUARIO> lista= Cargar(rs);
            if(lista.size()>0){
                return lista.get(0);
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public List<RHH_USUARIO> BuscarXCargo(int id) {
        try {
            String consulta = "select * from BROKER.RHH_USUARIO where ID_CARGO = " + id+" and ESTADO <> 2";
            ResultSet rs = con.EjecutarConsulta(consulta);
            List<RHH_USUARIO> lisT=Cargar(rs);
            return lisT;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public List<RHH_USUARIO> Retirados() {
        try {
            String consulta = "SELECT RHH_USUARIO.*\n" +
                            " FROM BROKER.RHH_USUARIO, BROKER.RHH_FECHAS_HITO, BROKER.RHH_EVENTOS_HITO\n" +
                            " WHERE (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n" +
                            " AND (RHH_FECHAS_HITO.ID_EVENTO_HITO = RHH_EVENTOS_HITO.ID)\n" +
                            " AND (RHH_USUARIO.ESTADO = 2)\n" +
                            " AND (RHH_EVENTOS_HITO.ID IN (1, 2, 21))";
            ResultSet rs = con.EjecutarConsulta(consulta);
            List<RHH_USUARIO> lisT=Cargar(rs);
            return lisT;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
      

    public RHH_USUARIO BuscarXusuario(String usr) throws SQLException {
            String consulta = "select * from BROKER.RHH_USUARIO where USUARIO like('" + usr + "')";
            ResultSet rs = con.EjecutarConsulta(consulta);
            List<RHH_USUARIO> lista=Cargar(rs);
            if(lista.size()>0){
                return lista.get(0);
            }
        return null;
    }          
    public List<RHH_USUARIO> BuscarDocumentoVencido(String text) throws SQLException {
            String consulta = "SELECT RHH_USUARIO.* \n" +
                            " FROM BROKER.RHH_PERSONA_DATOS, BROKER.RHH_PERSONA, BROKER.RHH_USUARIO, BROKER.RHH_DATOS \n" +
                            " WHERE (RHH_PERSONA_DATOS.ID_PERSONA = RHH_PERSONA.ID) \n" +
                            " AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID) \n" +
                            " AND (RHH_PERSONA_DATOS.ID_DATOS = RHH_DATOS.ID) \n" +
                            " AND (RHH_DATOS.TIPO = 1)\n" +
                            " AND (RHH_PERSONA_DATOS.CADUCIDAD <= SYSDATE)\n" +
                            " AND ((UPPER(RHH_PERSONA.PRIMER_NOMBRE||' '||RHH_PERSONA.SEGUNDO_NOMBRE||' '||RHH_PERSONA.PRIMER_APELLIDO||' '||RHH_PERSONA.SEGUNDO_APELLIDO) LIKE UPPER('%"+text+"%') ) OR TO_CHAR(RHH_PERSONA.CI) ='"+text+"%')";
            ResultSet rs = con.EjecutarConsulta(consulta);
            List<RHH_USUARIO> lista=Cargar(rs);
            if(lista.size()>0){
                return lista;
            }
        return null;
    }          
    public RHH_USUARIO Buscar(String usr, String pass) {
        try {
            pass = StringMD.getStringMessageDigest(pass, StringMD.SHA512);
            String consulta = "select * from BROKER.RHH_USUARIO where USUARIO like('" + usr + "') and PASSWORD like('" + pass + "')";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs).get(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }          
    public int isBloqueado(String ci) throws SQLException {
            String consulta = "select count(*) as cant from BROKER.RHH_USUARIOS_BLOQUEADOS where CI="+ci;
            ResultSet rs = con.EjecutarConsulta(consulta);
            rs.next();
            return rs.getInt("cant");
    }          

    public List<RHH_USUARIO> Todos() {
        try {
            String consulta = "select * from BROKER.RHH_USUARIO ";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public List<RHH_USUARIO> Todos_Activos_Incluyendo_Despedidos_Este_Mes(int ano, int mes) throws SQLException {        
        String mess ="0";
        if(mes<10)
            mess+=""+mes;
        String consulta = "SELECT * \n" +
                        "  FROM\n" +
                        "                   ( SELECT RHH_USUARIO.*\n" +
                        "                  FROM BROKER.RHH_USUARIO\n" +
                        "                 WHERE (RHH_USUARIO.ESTADO IN (0, 1, 3, 4))  \n" +
                        "                 UNION \n" +
                        "                SELECT DISTINCT RHH_USUARIO.*\n" +
                        "                  FROM BROKER.RHH_USUARIO, BROKER.RHH_FECHAS_HITO\n" +
                        "                 WHERE     (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n" +
                        "                       AND (RHH_FECHAS_HITO.ID_EVENTO_HITO IN (1, 2, 21))\n" +
                        "                       AND (to_char(RHH_FECHAS_HITO.FECHA,'MM/YYYY') = '02/2015' ) \n" +
                        "                        ) OTRO , BROKER.RHH_PERSONA\n" +
                        "           WHERE RHH_PERSONA.ID = OTRO.ID_PERSONA\n" +
                        "    ORDER BY RHH_PERSONA.PRIMER_APELLIDO";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);        
    }
    
    public List<RHH_USUARIO> TodosActivos() throws SQLException {        
        String consulta = "select * from BROKER.RHH_USUARIO where estado in (0,1,3,4)";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);        
    }
    
    public List<RHH_USUARIO> TodosPlanillaAAnual(int ano) throws SQLException {        
        String consulta =   "SELECT USUARIO.*\n" +
                            "FROM BROKER.RHH_USUARIO USUARIO, BROKER.RHH_PERSONA persona\n" +
                            "WHERE USUARIO.ID IN (SELECT INGRESO.ID_USUARIO FROM BROKER.RHH_FECHAS_HITO INGRESO WHERE INGRESO.ID_EVENTO_HITO=3 AND TO_CHAR(INGRESO.FECHA,'yyyy') <= '"+ano+"')\n" +
                            "AND USUARIO.ID NOT IN (SELECT SALIDA.ID_USUARIO FROM BROKER.RHH_FECHAS_HITO SALIDA WHERE SALIDA.ID_EVENTO_HITO IN (1,2,21) AND (TO_CHAR(SALIDA.FECHA,'yyyy') < '"+ano+"'))\n"+
                            "AND persona.ID = USUARIO.ID_PERSONA\n"+
                            "ORDER BY persona.PRIMER_APELLIDO ASC";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);        
    }

    public List<RHH_USUARIO> TodosNotInRetroactivo( int mes, int ano, String fecha) {
        try {
            String consulta = "SELECT RHH_USUARIO.* FROM BROKER.RHH_USUARIO, BROKER.RHH_FECHAS_HITO WHERE RHH_USUARIO.ID NOT IN (\n" +
                            " SELECT RHH_USUARIO.ID\n" +
                            "  FROM BROKER.RHH_USUARIO, BROKER.RHH_PLANILLA_RETROACTIVOS, BROKER.RHH_PLANILLA_RETROACTIVO_CABE\n" +
                            " WHERE     (RHH_PLANILLA_RETROACTIVOS.ID_USUARIO = RHH_USUARIO.ID)\n" +
                            "       AND (RHH_PLANILLA_RETROACTIVOS.ID_CABECERA = RHH_PLANILLA_RETROACTIVO_CABE.ID)\n" +
                            "       AND (RHH_PLANILLA_RETROACTIVO_CABE.ANO = "+ano+")\n" +
                            "       AND (RHH_PLANILLA_RETROACTIVO_CABE.MES = "+mes+"))\n"+
                            " AND ESTADO in (0,1,3)\n"+
                            " AND (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n"+
                            " AND (RHH_FECHAS_HITO.ID_EVENTO_HITO = 3)\n"+
                            " AND (RHH_FECHAS_HITO.FECHA < to_date('"+fecha+"','dd/MM/yyyy'))";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public List<RHH_USUARIO> buscarempleado(String text) throws SQLException {        
        
        String consulta = "SELECT RHH_USUARIO.*\n" +
        " FROM BROKER.RHH_USUARIO, BROKER.RHH_PERSONA, BROKER.RHH_CARGO\n" +
        " WHERE (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)\n" +
            "AND (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
            "AND (RHH_USUARIO.ESTADO IN (0, 1, 3,4))\n" +
            "AND((UPPER(RHH_PERSONA.PRIMER_NOMBRE) LIKE UPPER('%"+text+"%'))OR\n" +
                "(UPPER(RHH_PERSONA.SEGUNDO_NOMBRE) LIKE UPPER('%"+text+"%'))OR\n" +
                "(UPPER(RHH_PERSONA.PRIMER_APELLIDO) LIKE UPPER('%"+text+"%'))OR\n" +
                "(UPPER(RHH_PERSONA.SEGUNDO_APELLIDO) LIKE UPPER('%"+text+"%'))OR\n" +
                "(UPPER(RHH_PERSONA.CI)LIKE UPPER('%"+text+"%')) OR\n" +
                "(UPPER(RHH_CARGO.DESCRIPCION) LIKE UPPER('%"+text+"%')))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);        
    }
    public List<RHH_USUARIO> personasSinDocumentos(String text) throws SQLException {        
        
        String consulta = "SELECT RHH_USUARIO.*\n" +
                        "  FROM BROKER.RHH_PERSONA, BROKER.RHH_USUARIO\n" +
                        " WHERE (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID) \n" +
                        " AND ((UPPER(RHH_PERSONA.PRIMER_NOMBRE||' '||RHH_PERSONA.SEGUNDO_NOMBRE||' '||RHH_PERSONA.PRIMER_APELLIDO||' '||RHH_PERSONA.SEGUNDO_APELLIDO) LIKE UPPER('%"+text+"%'))"
                + "         or to_char(RHH_PERSONA.CI) like ('"+text+"%'))"+
                        "              AND RHH_USUARIO.ESTADO IN (0,1,3,4)\n" +
                        "              AND RHH_USUARIO.ID IN(\n" +
                        "            SELECT DISTINCT ID FROM (\n" +
                        "                    sELECT RHH_CARGO_DATOS.ID_DATOS, RHH_CARGO_DATOS.ID_CARGO,RHH_USUARIO.ID\n" +
                        "                         FROM BROKER.RHH_CARGO , BROKER.RHH_CARGO_DATOS, BROKER.RHH_DATOS, BROKER.RHH_USUARIO\n" +
                        "                        WHERE     (RHH_CARGO_DATOS.ID_CARGO = RHH_CARGO.ID)\n" +
                        "                               AND (RHH_CARGO_DATOS.ID_DATOS = RHH_DATOS.ID)\n" +
                        "                               AND (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                        "               MINUS\n" +
                        "                 SELECT RHH_CARGO_DATOS.ID_DATOS, RHH_CARGO_DATOS.ID_CARGO, RHH_USUARIO.ID\n" +
                        "                 FROM BROKER.RHH_CARGO,\n" +
                        "                           BROKER.RHH_PERSONA,\n" +
                        "                           BROKER.RHH_PERSONA_DATOS,\n" +
                        "                           BROKER.RHH_DATOS,\n" +
                        "                           BROKER.RHH_CARGO_DATOS,\n" +
                        "                           BROKER.RHH_USUARIO\n" +
                        "                     WHERE     (RHH_PERSONA_DATOS.ID_PERSONA = RHH_PERSONA.ID)\n" +
                        "                           AND (RHH_PERSONA_DATOS.ID_DATOS = RHH_DATOS.ID)\n" +
                        "                           AND (RHH_CARGO_DATOS.ID_CARGO = RHH_CARGO.ID)\n" +
                        "                           AND (RHH_CARGO_DATOS.ID_DATOS = RHH_DATOS.ID)\n" +
                        "                           AND (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                        "                           AND (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID)) CONSULTA)";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);        
    }
    public List<RHH_USUARIO> TodosNotInRetroactivo( int mes, int ano) {
        try {
            String consulta = "SELECT RHH_USUARIO.* FROM BROKER.RHH_USUARIO, BROKER.RHH_FECHAS_HITO WHERE RHH_USUARIO.ID NOT IN (\n" +
                            " SELECT RHH_USUARIO.ID\n" +
                            "  FROM BROKER.RHH_USUARIO, BROKER.RHH_PLANILLA_RETROACTIVOS, BROKER.RHH_PLANILLA_RETROACTIVO_CABE\n" +
                            "       WHERE (RHH_PLANILLA_RETROACTIVOS.ID_CABECERA = BROKER.RHH_PLANILLA_RETROACTIVO_CABE.ID)\n" +
                            "       AND (RHH_PLANILLA_RETROACTIVOS.ID_USUARIO = RHH_USUARIO.ID)\n" +
                            "       AND (RHH_PLANILLA_RETROACTIVO_CABE.ANO = "+ano+")\n" +
                            "       AND (RHH_PLANILLA_RETROACTIVO_CABE.MES = "+mes+"))\n"+
                            " AND ESTADO in (0,1,3)\n"+
                            " AND (RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID)\n"+
                            " AND (RHH_FECHAS_HITO.ID_EVENTO_HITO = 3)\n"+
                            " AND (RHH_FECHAS_HITO.FECHA < SYSDATE)";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public List<RHH_USUARIO> TodosSinQuincena(String txt) throws SQLException {        
        String consulta = "select * from BROKER.RHH_USUARIO , BROKER.RHH_PERSONA where \n" +
                        " (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID) AND \n" +
                        "RHH_USUARIO.ID not in (select id_usuario from BROKER.RHH_QUINCENA)\n" +
                        "  AND (UPPER(RHH_PERSONA.PRIMER_NOMBRE||'  '||RHH_PERSONA.SEGUNDO_NOMBRE ||'  '||RHH_PERSONA.PRIMER_APELLIDO ||'  '||RHH_PERSONA.SEGUNDO_APELLIDO) LIKE UPPER('%"+txt+"%') \n" +
                        "  OR (UPPER(RHH_PERSONA.CI) LIKE UPPER('"+txt+"%')))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    public List<RHH_USUARIO> TodosQuinquenio() throws SQLException {        
        String consulta = "select * from BROKER.RHH_USUARIO where ESTADO in (0,1,3)";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    public int existeCuenta(String usuario) {
        try {
            String consulta = "select count(*) as cant from BROKER.RHH_USUARIO where USUARIO='"+usuario+"'";
            ResultSet rs = con.EjecutarConsulta(consulta);
            rs.next();
            return rs.getInt("cant");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    public List<RHH_USUARIO> Cargar(ResultSet rs) {
        try {
            List<RHH_USUARIO> lista = new ArrayList<RHH_USUARIO>();
            while (rs.next()) {
                RHH_USUARIO objeto = new RHH_USUARIO(con);
                objeto.setESTADO(rs.getInt("ESTADO"));
                objeto.setESTADO_LOG(rs.getInt("ESTADO_LOG"));
                objeto.setID(rs.getInt("ID"));
                objeto.setID_CARGO(rs.getInt("ID_CARGO"));
                objeto.setID_PERSONA(rs.getInt("ID_PERSONA"));
                objeto.setPASSWORD(rs.getString("PASSWORD"));
                objeto.setUSUARIO(rs.getString("USUARIO"));                           
                objeto.setFLAG(rs.getInt("FLAG"));                           
                lista.add(objeto);
            }
            return lista;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_CARGO() {
        return ID_CARGO;
    }

    public void setID_CARGO(int ID_CARGO) {
        this.ID_CARGO = ID_CARGO;
    }

    public int getID_PERSONA() {
        return ID_PERSONA;
    }

    public void setID_PERSONA(int ID_PERSONA) {
        this.ID_PERSONA = ID_PERSONA;
    }

    public int getESTADO() {
        return ESTADO;
    }

    public void setESTADO(int ESTADO) {
        this.ESTADO = ESTADO;
    }

    public int getESTADO_LOG() {
        return ESTADO_LOG;
    }

    public void setESTADO_LOG(int ESTADO_LOG) {
        this.ESTADO_LOG = ESTADO_LOG;
    }

    public String getUSUARIO() {
        return USUARIO;
    }

    public void setUSUARIO(String USUARIO) {
        this.USUARIO = USUARIO;
    }

    public String getPASSWORD() {
        return PASSWORD;
    }

    public void setPASSWORD(String PASSWORD) {
        this.PASSWORD = PASSWORD;
    }

    public Conexion getCon() {
        return con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }

    public int getFLAG() {
        return FLAG;
    }

    public void setFLAG(int FLAG) {
        this.FLAG = FLAG;
    }
    
    
}
